package org.gradoop.flink.model.impl.operators.matching.single.cypher.planning.queryplan.unary;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.flink.api.java.DataSet;
import org.gradoop.common.model.impl.id.GradoopId;
import org.gradoop.common.model.impl.properties.PropertyValue;
import org.gradoop.flink.model.GradoopFlinkTestBase;
import org.gradoop.flink.model.impl.operators.matching.single.cypher.pojos.Embedding;
import org.gradoop.flink.model.impl.operators.matching.single.cypher.pojos.EmbeddingMetaData;
import org.gradoop.flink.model.impl.operators.matching.single.cypher.pojos.EmbeddingMetaData.EntryType;
import org.gradoop.flink.model.impl.operators.matching.single.cypher.planning.queryplan.MockPlanNode;
import org.gradoop.flink.model.impl.operators.matching.single.cypher.planning.queryplan.PlanNode;
import org.hamcrest.core.Is;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertTrue;
public class ProjectEmbeddingsNodeTest extends GradoopFlinkTestBase {
@Test
public void testMetaDataInitialization() throws Exception {
EmbeddingMetaData inputMetaData = new EmbeddingMetaData();
inputMetaData.setEntryColumn("a", EntryType.VERTEX, 0);
inputMetaData.setEntryColumn("b", EntryType.VERTEX, 1);
inputMetaData.setPropertyColumn("a", "age", 0);
inputMetaData.setPropertyColumn("b","name", 1);
PlanNode mockNode = new MockPlanNode(null, inputMetaData);
List<Pair<String, String>> projectedKeys = new ArrayList<>();
projectedKeys.add(Pair.of("a", "age"));
ProjectEmbeddingsNode node = new ProjectEmbeddingsNode(mockNode, projectedKeys);
EmbeddingMetaData outputMetaData = node.getEmbeddingMetaData();
assertThat(outputMetaData.getEntryCount(), is(2));
assertThat(outputMetaData.getEntryColumn("a"), is(0));
assertThat(outputMetaData.getEntryColumn("b"), is(1));
assertThat(outputMetaData.getPropertyCount(), is(1));
assertThat(outputMetaData.getPropertyColumn("a", "age"), is(0));
}
@Test
public void testExecute() throws Exception {
GradoopId vertexAId = GradoopId.get();
GradoopId vertexBId = GradoopId.get();
EmbeddingMetaData metaData = new EmbeddingMetaData();
metaData.setEntryColumn("a", EntryType.VERTEX, 0);
metaData.setEntryColumn("b", EntryType.VERTEX, 1);
metaData.setPropertyColumn("a", "age", 0);
metaData.setPropertyColumn("b", "age", 1);
Embedding embedding1 = new Embedding();
embedding1.add(vertexAId, PropertyValue.create(42));
embedding1.add(vertexBId, PropertyValue.create(23));
DataSet<Embedding> input = getExecutionEnvironment().fromElements(embedding1);
PlanNode mockChild = new MockPlanNode(input, metaData);
List<Pair<String, String>> projectedKeys = new ArrayList<>();
projectedKeys.add(Pair.of("a", "age"));
List<Embedding> result = new ProjectEmbeddingsNode(mockChild, projectedKeys).execute().collect();
Assert.assertThat(result.size(), Is.is(1));
assertTrue(result.get(0).getId(0).equals(vertexAId));
assertTrue(result.get(0).getId(1).equals(vertexBId));
assertThat(result.get(0).getProperties().size(), is(1));
assertTrue(result.get(0).getProperty(0).equals(PropertyValue.create(42)));
}
}